package ihm;

import java.awt.EventQueue;
import java.util.ArrayList;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import metier.Collaborateur;
import metier.Contrat;
import metier.Tache;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.ListSelectionModel;

public class FenetrePrincipale {

	private JFrame frmTempofixe;
	private static JTable tblCollaborateurs;
	private static JTable tblContrats;
	private static JTable tblTaches;
	private static ArrayList<Contrat> lesContrats;
	private static ArrayList<Tache> lesTaches;
	private static ArrayList<Collaborateur> lesCollaborateurs;

	final static String[] titreColonnesCollaborateur = new String[] {
			"Matricule", "Nom", "Prenom" };

	final static String[] titreColonnesContrat = new String[] {
			"R\u00E9ference", "Objet", "Nom Client" };

	final static String[] titreColonnesTaches = new String[] { "Num\u00E9ro",
			 "Contrat", "Collaborateurs", "Libell\u00E9", "Charges" };
	private JTabbedPane tbpTabs;
	private JButton btnModifier;
	private JButton btnSupprimer;
	private JButton btnAjouter;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FenetrePrincipale window = new FenetrePrincipale();
					window.frmTempofixe.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public FenetrePrincipale() {
		initialize();
	}

	public static ArrayList<Contrat> getLesContrats() {
		return lesContrats;
	}

	public static JTable getTblCollaborateurs() {
		return tblCollaborateurs;
	}

	public static JTable getTblContrats() {
		return tblContrats;
	}

	public static JTable getTblTaches() {
		return tblTaches;
	}

	public static ArrayList<Collaborateur> getLesCollaborateurs() {
		return lesCollaborateurs;
	}
	
	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmTempofixe = new JFrame();
		frmTempofixe.setTitle("TempoFixe");
		frmTempofixe.setBounds(100, 100, 727, 408);
		frmTempofixe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		lesContrats = new ArrayList<Contrat>();
		lesContrats.add(new Contrat(1,
				"Contrat de maintenance pour imprimante", "SAS jordinot"));
		lesContrats.add(new Contrat(2, "Contrat de support technique 24/24",
				"SA Matriache"));
		lesContrats.add(new Contrat(3, "Contrat de remplacement matériel",
				"SAS jordinot"));
		lesContrats.add(new Contrat(4,
				"Contrat de maintenance pour serveur IBM v90",
				"SARL Giga Réseau"));
		lesContrats.add(new Contrat(5, "Contrat de support", "SARL Martin"));

		lesTaches = new ArrayList<Tache>();
		lesTaches.add(new Tache(2, "réparation du poste client", 1, 3, 1));
		lesTaches.add(new Tache(9, "assemblage du poste pour le client", 456,
				3, 1));
		lesTaches.add(new Tache(10, "Développement de la plateforme intranet",
				20, 2, 2));
		lesTaches.add(new Tache(11, "Mise à jour de l'application cliente", 12,
				3, 3));

		lesCollaborateurs = new ArrayList<Collaborateur>();
		lesCollaborateurs.add(new Collaborateur(2, "LACIRE", "Kévin"));
		lesCollaborateurs.add(new Collaborateur(3, "BALAN", "David"));
		lesCollaborateurs.add(new Collaborateur(4, "VIGNERON", "Valentin"));
		lesCollaborateurs.add(new Collaborateur(5, "FAUCHOUX", "Benoît"));

		tbpTabs = new JTabbedPane(JTabbedPane.TOP);

		JLayeredPane lydpaneBoutons = new JLayeredPane();
		GroupLayout groupLayout = new GroupLayout(frmTempofixe.getContentPane());
		groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(
				Alignment.TRAILING).addGroup(
				Alignment.LEADING,
				groupLayout
						.createSequentialGroup()
						.addContainerGap()
						.addGroup(
								groupLayout
										.createParallelGroup(
												Alignment.TRAILING, false)
										.addComponent(tbpTabs,
												Alignment.LEADING)
										.addComponent(lydpaneBoutons,
												Alignment.LEADING,
												GroupLayout.DEFAULT_SIZE, 686,
												Short.MAX_VALUE))
						.addContainerGap(15, Short.MAX_VALUE)));
		groupLayout.setVerticalGroup(groupLayout.createParallelGroup(
				Alignment.LEADING).addGroup(
				groupLayout
						.createSequentialGroup()
						.addComponent(tbpTabs, GroupLayout.PREFERRED_SIZE, 316,
								GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(lydpaneBoutons,
								GroupLayout.PREFERRED_SIZE, 38,
								GroupLayout.PREFERRED_SIZE)
						.addContainerGap(GroupLayout.DEFAULT_SIZE,
								Short.MAX_VALUE)));

		btnAjouter = new JButton("Ajouter");
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				switch (tbpTabs.getSelectedIndex()) {
				case 0:// collaborateurs
					FenetreAjouterCollaborateur windowCollaborateur = new FenetreAjouterCollaborateur();
					windowCollaborateur.setVisible(true);
					break;
				case 1:// contrats
					FenetreAjouterContrat windowContrat = new FenetreAjouterContrat();
					windowContrat.setVisible(true);
					break;
				case 2:// tâches
					FenetreAjouterTache windowTache = new FenetreAjouterTache();
					windowTache.setVisible(true);
					break;
				}
			}
		});
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnAjouter.setBounds(0, 0, 202, 34);
		lydpaneBoutons.add(btnAjouter);

		btnModifier = new JButton("Modifier");
		btnModifier.setEnabled(false);
		btnModifier.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				switch (tbpTabs.getSelectedIndex()) {
				case 0:// collaborateurs
					FenetreModifierCollaborateur windowCollaborateur = new FenetreModifierCollaborateur();
					windowCollaborateur.setVisible(true);
					break;
				case 1:// contrats
					FenetreModifierContrat windowContrat = new FenetreModifierContrat();
					windowContrat.setVisible(true);
					break;
				case 2:// tâches
					FenetreModifierTache windowTache = new FenetreModifierTache();
					windowTache.setVisible(true);
					break;
				}
			}
		});
		btnModifier.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnModifier.setBounds(201, 0, 279, 34);
		lydpaneBoutons.add(btnModifier);

		btnSupprimer = new JButton("Supprimer");
		btnSupprimer.setEnabled(false);
		btnSupprimer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				switch (tbpTabs.getSelectedIndex()) {

				case 0: // tabCollaborateurs
					lesCollaborateurs.remove(lesCollaborateurs
							.get(tblCollaborateurs.getSelectedRow()));
					remplirTblCollaborateur();
					break;
				case 1: // tabContrats
					// int ref= (int)
					// tblContrats.getValueAt(tblContrats.getSelectedRow(),0);
					// String objet= (String)
					// tblContrats.getValueAt(tblContrats.getSelectedRow(),1);
					// String nom = (String)
					// tblContrats.getValueAt(tblContrats.getSelectedRow(),2);
					// Contrat contratSupprimer = new Contrat(ref, objet, nom);

					lesContrats.remove(lesContrats.get(tblContrats
							.getSelectedRow()));
					remplirTblContrat();
					break;
				case 2: // tabTaches
					lesTaches.remove(lesTaches.get(tblTaches.getSelectedRow()));
					remplirTblTaches();
					break;
				}
			}
		});
		btnSupprimer.setBounds(479, 0, 207, 34);
		lydpaneBoutons.add(btnSupprimer);

		JScrollPane tabCollaborateurs = new JScrollPane();
		tbpTabs.addTab("Collaborateurs", null, tabCollaborateurs, null);

		tblCollaborateurs = new JTable();
		tabCollaborateurs.setViewportView(tblCollaborateurs);
		tblCollaborateurs.getColumnModel().getSelectionModel()
				.addListSelectionListener(new ListSelectionListener() {
					@Override
					public void valueChanged(ListSelectionEvent arg0) {

						if (tblCollaborateurs.getSelectedRow() != -1) {
							btnModifier.setEnabled(true);
							btnSupprimer.setEnabled(true);
						} else {
							btnModifier.setEnabled(false);
							btnSupprimer.setEnabled(false);
						}

					}
				});
		frmTempofixe.getContentPane().setLayout(groupLayout);

		JScrollPane tabContrats = new JScrollPane();
		tbpTabs.addTab("Contrats", null, tabContrats, null);

		tblContrats = new JTable();
		tblContrats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabContrats.setViewportView(tblContrats);
		tblContrats.getColumnModel().getSelectionModel()
				.addListSelectionListener(new ListSelectionListener() {
					@Override
					public void valueChanged(ListSelectionEvent arg0) {

						if (tblContrats.getSelectedRow() != -1) {
							btnModifier.setEnabled(true);
							btnSupprimer.setEnabled(true);
						} else {
							btnModifier.setEnabled(false);
							btnSupprimer.setEnabled(false);
						}

					}
				});
		frmTempofixe.getContentPane().setLayout(groupLayout);

		JScrollPane tabTaches = new JScrollPane();
		tbpTabs.addTab("Tâches", null, tabTaches, null);

		tblTaches = new JTable();
		tabTaches.setViewportView(tblTaches);
		tblTaches.getColumnModel().getSelectionModel()
				.addListSelectionListener(new ListSelectionListener() {
					@Override
					public void valueChanged(ListSelectionEvent arg0) {

						if (tblTaches.getSelectedRow() != -1) {
							btnModifier.setEnabled(true);
							btnSupprimer.setEnabled(true);
						} else {
							btnModifier.setEnabled(false);
							btnSupprimer.setEnabled(false);
						}

					}
				});
		frmTempofixe.getContentPane().setLayout(groupLayout);
		remplirTblCollaborateur();
		tbpTabs.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				switch (tbpTabs.getSelectedIndex()) {
				case 0:// collaborateurs
					FenetrePrincipale.remplirTblCollaborateur();
					btnSupprimer.setEnabled(false);
					btnModifier.setEnabled(false);
					break;
				case 1:// contrats
					FenetrePrincipale.remplirTblContrat();
					btnSupprimer.setEnabled(false);
					btnModifier.setEnabled(false);
					break;
				case 2:// taches
					FenetrePrincipale.remplirTblTaches();
					btnSupprimer.setEnabled(false);
					btnModifier.setEnabled(false);
					break;
				}
			}
		});
	}

	public static void remplirTblTaches() {
		Object[][] tableauDonneesTache = new Object[lesTaches.size()][5];
		Tache tacheEnCours;
		for (int i = 0; i < lesTaches.size(); i++) {
			tacheEnCours = lesTaches.get(i);
			tableauDonneesTache[i] = new Object[5];
			tableauDonneesTache[i][0] = tacheEnCours.getNumTache();
			tableauDonneesTache[i][1] = tacheEnCours.getReferenceContrat();
			tableauDonneesTache[i][2] = tacheEnCours
					.getMatriculeCollaborateur();
			tableauDonneesTache[i][3] = tacheEnCours.getLibelle();
			tableauDonneesTache[i][4] = tacheEnCours.getChargePreviJoursHomme();
		}

		tblTaches.setModel(new DefaultTableModel(tableauDonneesTache,
				titreColonnesTaches));
	}

	public static void remplirTblCollaborateur() {
		Object[][] tableauDonneesCollaborateur = new Object[lesCollaborateurs
				.size()][3];
		Collaborateur collaborateurEnCours;
		for (int i = 0; i < lesCollaborateurs.size(); i++) {
			collaborateurEnCours = lesCollaborateurs.get(i);
			tableauDonneesCollaborateur[i] = new Object[3];
			tableauDonneesCollaborateur[i][0] = collaborateurEnCours
					.getMatricule();
			tableauDonneesCollaborateur[i][1] = collaborateurEnCours.getNom();
			tableauDonneesCollaborateur[i][2] = collaborateurEnCours
					.getPrenom();

		}

		tblCollaborateurs.setModel(new DefaultTableModel(
				tableauDonneesCollaborateur, titreColonnesCollaborateur));
	}

	public static void remplirTblContrat() {
		Object[][] tableauDonneesContrat = new Object[lesContrats.size()][3];
		Contrat contratEnCours;
		for (int i = 0; i < lesContrats.size(); i++) {
			contratEnCours = lesContrats.get(i);
			tableauDonneesContrat[i] = new Object[3];
			tableauDonneesContrat[i][0] = contratEnCours.getReference();
			tableauDonneesContrat[i][1] = contratEnCours.getObjetContrat();
			tableauDonneesContrat[i][2] = contratEnCours.getNomClient();

		}
		tblContrats.setModel(new DefaultTableModel(tableauDonneesContrat,
				titreColonnesContrat));
	}
}
